/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.adama.dto;

import fr.adama.entite.typePerso.EtatBulletin;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.springframework.format.annotation.DateTimeFormat;

/**
 *
 * @author mini-john
 */
public class BulletinPaieDTO implements Serializable {

    private Long id;

    private ModelePaieDTO modelPaie;
    @DateTimeFormat(pattern = "MM yyyy")
    @NotNull(message = "{NotNull.bulletin.periode}")
    private Date periode=new Date();
    private Integer mois;
    private Integer annee;
    private BigDecimal chargeSalarial;
    private BigDecimal chargePatronale;
    private BigDecimal aDeduire=BigDecimal.ZERO;
    private BigDecimal aPayer=BigDecimal.ZERO;
    private BigDecimal salaireImposable;
    private BigDecimal salaireNetAPayer;
    private String pathToPdf;
     private String numero;
    private EtatBulletin etatBulletin;
    @NotNull(message = "{NotNull.bulletin.contrat}")
    private ContratDTO contrat;
    @Size(min = 1,message = "{Size.bulletin.ligneHotaire}")
    private List<LigneHoraireDTO> ligneHoraire= new LinkedList<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public ModelePaieDTO getModelPaie() {
        return modelPaie;
    }

    public void setModelPaie(ModelePaieDTO modelPaie) {
        this.modelPaie = modelPaie;
    }

    public BigDecimal getChargeSalarial() {
        return chargeSalarial;
    }

    public void setChargeSalarial(BigDecimal chargeSalarial) {
        this.chargeSalarial = chargeSalarial;
    }

    

    public BigDecimal getChargePatronale() {
        return chargePatronale;
    }

    public void setChargePatronale(BigDecimal chargePatronale) {
        this.chargePatronale = chargePatronale;
    }

    public BigDecimal getaDeduire() {
        return aDeduire;
    }

    public void setaDeduire(BigDecimal aDeduire) {
        this.aDeduire = aDeduire;
    }

    public BigDecimal getaPayer() {
        return aPayer;
    }

    public void setaPayer(BigDecimal aPayer) {
        this.aPayer = aPayer;
    }

    public BigDecimal getSalaireImposable() {
        return salaireImposable;
    }

    public void setSalaireImposable(BigDecimal salaireImposable) {
        this.salaireImposable = salaireImposable;
    }

    public BigDecimal getSalaireNetAPayer() {
        return salaireNetAPayer;
    }

    public void setSalaireNetAPayer(BigDecimal salaireNetAPayer) {
        this.salaireNetAPayer = salaireNetAPayer;
    }

    public ContratDTO getContrat() {
        return contrat;
    }

    public void setContrat(ContratDTO contrat) {
        this.contrat = contrat;
    }

    public List<LigneHoraireDTO> getLigneHoraire() {
        return ligneHoraire;
    }

    public void setLigneHoraire(List<LigneHoraireDTO> ligneHoraire) {
        this.ligneHoraire = ligneHoraire;
    }

    public String getPathToPdf() {
        return pathToPdf;
    }

    public void setPathToPdf(String pathToPdf) {
        this.pathToPdf = pathToPdf;
    }

    public Date getPeriode() {
        return periode;
    }

    public void setPeriode(Date periode) {
        this.periode = periode;
    }

    public Integer getMois() {
        return mois;
    }

    public void setMois(Integer mois) {
        this.mois = mois;
    }

    public Integer getAnnee() {
        return annee;
    }

    public void setAnnee(Integer annee) {
        this.annee = annee;
    }

    public EtatBulletin getEtatBulletin() {
        return etatBulletin;
    }

    public void setEtatBulletin(EtatBulletin etatBulletin) {
        this.etatBulletin = etatBulletin;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }
   
    public BigDecimal getNombreHeureCongePaye() {
        BigDecimal nbHeuCongePaye = BigDecimal.ZERO;
        for (LigneHoraireDTO ligne : ligneHoraire) {
            nbHeuCongePaye = nbHeuCongePaye.add(ligne.getNombre());
        }
        nbHeuCongePaye = nbHeuCongePaye.multiply(new BigDecimal(10)).divide(new BigDecimal(100));

        return nbHeuCongePaye.setScale(2, BigDecimal.ROUND_CEILING);
    }

    public BigDecimal getMontantHeureCongePaye() {
        BigDecimal montantHeureCongePaye = BigDecimal.ZERO;

        montantHeureCongePaye = getMontantHeure().multiply(new BigDecimal(10)).divide(new BigDecimal(100));

        return montantHeureCongePaye.setScale(2, BigDecimal.ROUND_CEILING);
    }

    public BigDecimal getMontantHeure() {
        BigDecimal montantHeure = BigDecimal.ZERO;
        for (LigneHoraireDTO ligne : ligneHoraire) {
            montantHeure = montantHeure.add(ligne.getMontantLigneHoraire());
        }

        return montantHeure.setScale(2, BigDecimal.ROUND_CEILING);
    }

    public BigDecimal getNombreHeureTotal() {
        BigDecimal nbHeuCongePaye = BigDecimal.ZERO;
        for (LigneHoraireDTO ligne : ligneHoraire) {
            nbHeuCongePaye = nbHeuCongePaye.add(ligne.getNombre());
        }
        return nbHeuCongePaye.add(getNombreHeureCongePaye()).setScale(2, BigDecimal.ROUND_CEILING);
    }

    public BigDecimal getSalaireBrut() {
        BigDecimal salaireBrut = BigDecimal.ZERO;
        salaireBrut = getMontantHeureCongePaye().add(getMontantHeure());
        return salaireBrut.setScale(2, BigDecimal.ROUND_CEILING);
    }

    
}
